#1.创建一个列表list1其包含元素 1, 2, 3, 4, 5
list1 = [1, 2, 3, 4, 5]
#2.向list1添加一个元素6
list1.append(6)
#3.从list1中删除元素3
list1.remove(3)
#4.修改list1的第二个元素值为8
list1[1] = 8
#5.找出 list1 中值为 8 的元素索引
index = list1.index(8)
#6.历 list1打印每个元素的值
for element in list1:
    print(element)
#7.利用循环将一个新列表[7, 8, 9]的每个元素添加到list1的末尾
newlist = [7, 8, 9]
for element in newlist:
    list1.append(element)
#8.使用一个命令，将列表 [10, 11, 12] 添加到 list1 的末尾
list1.extend([10, 11, 12])
#9.使用切片操作，获取 list1 第三个元素到第五个元素（包含第五个元素）
List = list1[2:5]
#10.将 list1 的第三个元素修改为两个新元素 [13, 14]
list1[2:3] = [13, 14]
###################################################################################
#进阶：
# 初始列表
my_list = [3, "apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]
# 1. 添加元素"fig"
my_list.append("fig")
#print("1. 添加后的列表:", my_list)
# 2. 删除元素"banana"
my_list.remove("banana")
#print("2. 删除后的列表:", my_list)
# 3. 将元素7修改为字符串"grape"
index_7 = my_list.index(7)   #获取下标
my_list[index_7] = "grape"
#print("3. 修改后的列表:", my_list)
# 4. 查找并打印元素"cherry"的索引值
cherry_index = my_list.index("cherry")
#print("4. 'cherry'的索引:", cherry_index)
# 5. 遍历并打印每个元素
for element in my_list:
    print(element)
# 6. 在"cherry"后面插入"kiwi"
cherry_index = my_list.index("cherry")
my_list.insert(cherry_index + 1, "kiwi")
#print("6. 插入后的列表:", my_list)
# 7. 打印第三个元素（索引为2）
print(my_list[2])
# 8. 打印倒数第二个元素（索引为-2）
print(my_list[-2])
# 9. 切片获取第三个至第七个元素（索引2~6）
slice_r = my_list[2:7]
print(slice_r)
# 10. 切片反转整个列表
rev_list = my_list[::-1]
print(rev_list)
# 11. 对字符串进行排序，保留数字原位
#记录字符的下标
str_indices = [i for i, x in enumerate(my_list) if isinstance(x, str)]
#抽出字符进行排序
str_valu = [x for x in my_list if isinstance(x, str)]
str_valu_sorted = sorted(str_valu)

for i, idx in enumerate(str_indices):
    my_list[idx] = str_valu_sorted[i]
print("11. 字符串排序后的列表:", my_list)

# 12. 将数字替换为对应的字符串形式
num = {
    1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five',
    6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 0: 'zero'
}

for i, x in enumerate(my_list):
    if isinstance(x, int):
        my_list[i] = num.get(x, str(x))
print("12. 数字替换后的列表:", my_list)
###########################################################################################################
#复杂：
import random
# 1. 创建包含1到100的所有偶数的列表
nums = list(range(2, 101, 2))
#print("1. 偶数列表:", nums[:5], "...", nums[-5:])
# 2. 将所有偶数替换为它们的平方
nums = [x**2 for x in nums]
#print("2. 平方后的列表:", nums[:5], "...", nums[-5:])
# 3. 删除所有大于1000的数字
nums = [x for x in nums if x <= 1000]
#print("3. 删除>1000后的列表:", nums[:5], "...", nums[-5:])
# 4. 逆序列表
nums.reverse()
#print("4. 逆序后的列表:", nums[:5], "...", nums[-5:])
# 5. 切片取出前10个元素
first_ten = nums[:10]
#print("5. 前10个元素:", first_ten)
# 6. 添加新列表到末尾
nums.extend([101, 102, 103])
#print("6. 添加新元素后的列表:", nums[-5:])
# 7. 计算平均值
average = sum(nums) / len(nums)
#print("7. 平均值:", average)
# 8. 找到最大值和最小值
max_val = max(nums)
min_val = min(nums)
print(f"8. 最大值: {max_val}, 最小值: {min_val}")
# 9. 找出第一次出现11的索引
try:
    idx_11 = nums.index(11)
except ValueError:
    idx_11 = "未找到"
#print("9. 11的索引位置:", idx_11)
# 10. 用循环遍历列表，替换为字符形式（使用for循环）
for i in range(len(nums)):
    nums[i] = str(nums[i])
#print("10. 字符形式列表:", nums[:5], "...", nums[-5:])
# 11. 将所有元素转换为浮点数
nums = [float(x) for x in nums]
#print("11. 浮点数列表:", nums[:5], "...", nums[-5:])
# 12. 统计大于50的元素个数
count_gt_50 = len([x for x in nums if x > 50])
#print("12. 大于50的元素个数:", count_gt_50)
# 13. 在第3个位置插入数字99（索引为2）
nums.insert(2, 99.0)
#print("13. 插入99后的列表:", nums[:5])
# 14. 删除最后一个元素
nums.pop()
#print("14. 删除最后元素后的列表:", nums[-5:])
# 15. 使用列表推导式创建新列表（每个元素乘以2）
doubled = [x * 2 for x in nums]
#print("15. 每个元素乘以2:", doubled[:5], "...", doubled[-5:])
# 16. 将列表分成两部分（<=50 和 >50）
part1 = [x for x in nums if x <= 50]
part2 = [x for x in nums if x > 50]
#print("16. 小于等于50的部分:", part1[:5], "...")
#print("    大于50的部分:", part2[:5], "...")
# 17. 转换为字典（元素作为键，索引作为值）
nums_dict = {x: i for i, x in enumerate(nums)}
#print("17. 转换为字典:", list(nums_dict.items())[:5], "...")
# 18. 使用enumerate遍历并打印元素和索引
print("18. 使用enumerate遍历:")
for i, x in enumerate(nums[:5]):
    print(f"  索引 {i}: {x}")
# 19. 随机取出一个元素
random_element = random.choice(nums)
#print("19. 随机元素:", random_element)
# 20. 保存到txt文件
with open("nums.txt", "w") as f:
    for x in nums:
        f.write(f"{x}\n")
